﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once
#include "GcmpModelInterface.h"
#include "IObject.h"
#include "OwnerPtr.h"
#include <map>
#include "NdbDataSchema.h"

namespace gcmp
{
    class IDocument;

    /// \brief 协同过滤器具体的行为类型
    ///
    /// 协同过滤器具体的行为类型
    ENUM_CLASS(DatasetFilterActionType)
    {
        None = 0, ///< 没有具体动作，逻辑过滤器会用这个值
        Equal, ///< 等于某个编码对应的值
        GreatThan, ///< 大于某个编码对应的值
        GreatEqualThan, ///< 大于等于某个编码对应的值
        LessThan, ///< 小于某个编码对应的值
        LessEqualThan, ///< 小于等于某个编码对应的值
        Adhere, ///< 依附于某个编码的值
        NotEqual,///< 不等于某个编码对应的值
        All  ///< 所有都通过
    };

    /// \brief 数据集过滤器
    ///
    /// 提供数据集过滤器相关接口
    class GCMP_MODEL_INTERFACE_EXPORT IDatasetFilter : public IObject
    {
        DEFINE_CAST_DERIVED(gcmp::IDatasetFilter, gcmp::IObject)
    public:
        /// \brief 克隆
        ///
        /// \return 克隆得到的过滤器
        virtual OwnerPtr<IDatasetFilter> Clone() const = 0;

        /// \brief 获取过滤器Id
        ///
        /// \return const std::wstring& 过滤器Id
        virtual const std::wstring& GetFilterId() const = 0;

        /// \brief 设置过滤器Id
        ///
        /// \param id 参数id
        virtual void SetFilterId(const std::wstring& id) = 0;

        /// \brief 获取过滤器名字
        ///
        /// \return const std::wstring& 过滤器名字
        virtual const std::wstring& GetName() const = 0;

        /// \brief 设置过滤器名字
        ///
        /// \param name 过滤器名字
        virtual void SetName(const std::wstring& name) = 0;

        /// \brief 获取被链接的文档的数据集Id
        ///
        /// \return const std::wstring& 被链接的文档的数据集Id列表
        virtual const std::wstring& GetLinkDatasetId() const = 0;

        /// \brief 设置被链接的文档的数据集Id
        ///
        /// \param linkDatasetIds 被链接的文档的数据集Id列表
        virtual void SetLinkDatasetId(const std::wstring& linkDatasetId) = 0;

        /// \brief 获取过滤器动作
        ///
        /// \return DatasetFilterActionType 过滤器动作
        virtual DatasetFilterActionType GetActionType() const = 0;

        /// \brief 是否是逻辑过滤器
        ///
        /// \return bool 返回true如果是逻辑过滤器，否则false
        virtual bool IsLogicalFilter() const = 0;
    };

}
